/**
 * Oggettone che si occupa interamente della gestione e della visualizzazione delle
 * funzioni riguardanti i work
 */

 function WorkInspector()
 {
 	var Works = Array();
	var analizer = new AnalizeWork()
	
	
	/**
	 * Controlla se il work è presente in cache e, in caso contrario, lo crea
	 * @param {Object} expMeta Sottoalbero DOM con radice metadati, riguardante l'espressione
	 * @param {Object} callback Funzione da richiamare a operazione conlcusa.
	 * Ha la forma di: callback(WorkIndex,wNodeOfExp)
	 */
	var lookForWork = function(expMeta,callback)
	{
		var epublisher = expMeta.getElementsByTagName('epublisher')[0].innerText;
		var wid = expMeta.getElementsByTagName('widentifier')[0].innerText;
		var eid = expMeta.getElementsByTagName('eidentifier')[0].innerText;
		
		for (work in Works)
			if (work.retriveInfo('widentifier',null) == wid)
			{
				var expNode = Works[work].lookForId(eid);
				callback(work,expNode);
				return;
			}
		
		var dataSource;
		
		switch(epublisher) {
			case crescentina:
				dataSource = new DataSource(crescentina);
				break;
			case sDiIntDS:
				dataSource = new DataSource(sDiIntDS);
				break;
			case cataDS:
				dataSource = new DataSource(cataDS);
				break;
			case ferrazzDS:
				dataSource = new DataSource(ferrazzDS);
				break;
		}
		
		var tempWork = new AnalizeWork(wid,dataSource);
		tempWork.onready = function(){
			var index = Works.push(tempWork);
			var expNode = Works[work].lookForId(eid);
			callback(index-1,expNode);
		}
		return;
	}
	
	this.analize = function(expMeta)
	{
		lookForWork(expMeta,
			function(wIndex,eNode)
			{
				this.drawAnalysis(wIndex,eNode);
			});
	}
	
	/**
	 * L'effettiva funzione richiamabile dall'esterno. Si occupa di 
	 * @param {Object} workIndex
	 * @param {Object} expNode
	 */
	this.drawAnalysis = function(workIndex,expNode)
	{
		
	}
	
 }
